Hive Sql学习记录一

内部表和外部表

  • 内部表【managed table】:默认创建的就是内部表,删除内部表会删除meta信息和数据,适合作为中间表。
  • 外部表 【external table】:创建时候加上关键字external,删除外部表只会删除meta信息不会删除数据,这样可以利用到历史数据,适合多个表利用同一份数据。【比如一份log,多个部门都想利用这时候建议外部表】。
  • 临时表:
  • 分区表:hive的数据本质上是按照一定规范映射成对应的目录存储在hadoop的hdfs上的,一张表对饮一个文件,我们每一次查询实际是全表扫描,为了减少每次查询我们会采用 分区表 的方式存储数据,这样查询时候值需要扫描制定分区的文件即可【对应mysql的数据分表或者分区】,分区表在创建时候需要制定一个字段作为分区字段,insert时候必须带上这个字段。

Location

  • 建外部表使用LOCATION,读取到数据,同时插入数据,会在LOCATION位置新生成文件000000_0,删除外部表,数据文件还在,证明外部表功能还在。
  • 建立外部表,不使用LOCATION,会在默认在/hive/warehouse/数据库名称/表名,建立目录。然后插入数据,会生成新文件,删除表。目录和文件都还在。符合外部表功能。
  • 建内部表使用LOCATION,读取到数据,同时插入数据也会生成新文件,但删除内部表,数据文件都会消失,整个目录都会删除掉,也正好符合内部表的功能。
  • 建立内部表,不使用LOCATION。在相应位置创建新目录,插入数据,一样生成新文件。但是如果删除内部表,目录和数据文件都会删除掉。